package com.leshowski.agendaUCV2.fabrica;

import java.util.ArrayList;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import com.leshowski.agendaUCV2.comun.ManejaProperties;
import com.leshowski.agendaUCV2.modelo.EventoAgenda;
import com.leshowski.agendaUCV2.modelo.Fecha;

/**
 * Metodos utilizados para manipulacion, fabricacion de los objetos Entidad
 * de agenda UC
 * @author lponce
 *
 */
public class AgendaUCWebFabrica {
	
	public static ArrayList<EventoAgenda> retornaAgendaUC(Fecha fecha_) throws Exception{
		
		//variables del metodo
		ArrayList<EventoAgenda> agendaUCDia = new ArrayList<EventoAgenda>();
		String ruta_archivo_properties = "com/leshowski/agendaUCV2/conf/general.properties";
		String llave = "webAgendaUC";
		String urlAgendaUC = "";
		
		String titulo      = "";
		String fecha       = "";
		String horario     = "";
		String urlImagen   = "";
		String urlWeb	   = "";
		String lugar       = "";
		String descripcion = "";
		
		try{
			
			//validar datos de entrada
			if(fecha_.getAnio() == null || fecha_.getMes()==null || fecha_.getDia()==null)
				return null;
			
			//se rescata la URL de la agendaUC
			urlAgendaUC = ManejaProperties.entregaValor(ruta_archivo_properties, llave);
			
			//se reemplaza en la URL los valores de anio, mes y dia segun los
			//parametros de entrada
			urlAgendaUC = urlAgendaUC.replace("%anio%", fecha_.getAnio());
			urlAgendaUC = urlAgendaUC.replace("%mes%", fecha_.getMes());
			urlAgendaUC = urlAgendaUC.replace("%dia%", fecha_.getDia());
			
			//Se obtiene el documento que representa a la p�gina de la Agenda UC
			//para el dia,mes,anio
			Document doc = Jsoup.connect(urlAgendaUC).get();	
			
			Elements eventos = doc.select("div.post");
			
	    	int i=0;
			
	    	for(Element evento:eventos){
	    		
	    		EventoAgenda eventoAgendaTemp = new EventoAgenda();
	    		
	    		//Titulo del evento
	    		try{
	    			titulo = evento.getElementsByTag("h3").first().text();
	    		}catch(NullPointerException e){
	    			titulo = "";
	    		}
	    		//Url con la informaci�n completa
	    		try{
	    			urlWeb = evento.select("h3 > a ").attr("href");
	    		}catch(NullPointerException e){
	    			urlWeb = "";
	    		}
	    		//Imagen asociada si es que tiene
	    		try{
	    			urlImagen = evento.getElementsByTag("img").first().absUrl("src");
	    		}catch(NullPointerException e){
	    			urlImagen = "";
	    		}
	    		//Fecha del evento
	    		try{
	    			evento.select("p strong").remove();
	    			fecha  = evento.getElementsByTag("p").get(0).text();
	    		}catch(NullPointerException e){
	    			fecha = "";
	    		}
	    		//Horario en el que se lleva a cabo
	    		try{
	    			evento.select("p strong").remove();
	    			horario  = evento.getElementsByTag("p").get(1).text();
	    		}catch(NullPointerException e){
	    			horario = "";
	    		}
	    		//Lugar donde se lleva a cabo
	    		try{
	    			evento.select("p strong").remove();
	    			lugar  = evento.getElementsByTag("p").get(2).text();
	    		}catch(NullPointerException e){
	    			lugar = "";
	    		}
	    		//La descripci�n
	    		try{
	    			evento.select("p strong").remove();
	    			descripcion  = evento.getElementsByTag("p").get(3).text();
	    		}catch(NullPointerException e){
	    			descripcion = "";
	    		}
	    		
	    		eventoAgendaTemp.setTitulo(titulo);
	    		eventoAgendaTemp.setDescripcion(descripcion);
	    		eventoAgendaTemp.setFecha(fecha);
	    		eventoAgendaTemp.setHorario(horario);
	    		eventoAgendaTemp.setLugar(lugar);
	    		eventoAgendaTemp.setUrl(urlWeb);
	    		eventoAgendaTemp.setUrlImagen(urlImagen);
	    		
	    		if(i==0)
	    			eventoAgendaTemp.setSeleccionado("S");
	    		else
	    			eventoAgendaTemp.setSeleccionado("N");
	    		
	    		i++;
	    		
	    		//se agrega el evento a la lista 
	    		agendaUCDia.add(eventoAgendaTemp);
	    			
	    	}
			
			return agendaUCDia;
			
		}catch(Exception e){
			
			throw e;
			
		}finally{
			
			
		}
	}
}
